package com.sanploy.manage.mapper;

import com.sanploy.common.domain.Goods;
import com.sanploy.common.domain.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * Created by zhu yingzhi on 2017/9/8.
 * @author yingzhi zhu
 * 商品数据库操作接口
 */
@Mapper
public interface GoodsMapper {
 /**
  * 通过Id获取商品
  * @param id 商品Id
  * @return 商品Vo对象
  */
     GoodsDetailVo getGoodsById(@Param("id") Long id);

     /**
  * 通过Id获取商品
  * @param list 商品Id list
  * @return 商品Vo对象
  */
     List<Goods> getGoodsByIdList(List<Long> list);

 /**
  * 插入商品
  * @param goods 商品信息
  * @return 影响行数
  */
     int insertGoods(Goods goods);

 /**
  * 更新商品
  * @param goods 商品信息
  * @return 影响行数
  */
     int updateGoods(Goods goods);

 /**
  * 删除商品
  * @param id 商品id
  * @return 影响行数
  */
     @Update("UPDATE goods SET is_delete=TRUE WHERE id=#{id}")
     int deleteGoods(@Param("id") Long id);

 /**
  * 分页获取商品
  * @param start 开始记录数
  * @param end 行数
  * @param goodsSort 查找规则
  * @return 商品信息 List
  */
     List<GoodsListVo> getGoodsPage(@Param("start") int start, @Param("end") int end, @Param("goodsSort") GoodsSort goodsSort);

 /**
  * 获取总数
  * @param goodsSort 查找规则
  * @return 集合总数
  */
     int getGoodsPageCount(GoodsSort goodsSort);

 /**
  * 设置商品上下架
  * @param is_shelve 是否上下架
  * @param goods_id 商品id
  * @return 影响行数
  */
     int setShelve(@Param("is_shelve") boolean is_shelve, @Param("goods_id") Long goods_id);

 /**
  * 更新促销信息
  * @param promoteVo 促销信息
  * @return 影响行数
  */
     int updatePromote(PromoteVo promoteVo);

 /**
  * 获得促销信息
  * @param goods_id 商品id
  * @return 促销信息
  */
     PromoteVo getPromote(@Param("goods_id") Long goods_id);

 /**
  * 按名字查找商品
  * @param name 名字
  * @return 搜素结果
  */
     @Select("SELECT id,goods_name AS name FROM  goods WHERE goods_name LIKE concat(concat('%',#{name}),'%')")
     List<SearchResultVo> searchGoodsByName(@Param("name") String name);

 /**
  * 减少商品库存
  * @param number 减少数量
  * @param goodsId 商品id
  * @return 影响行数
  */
     @Update("UPDATE goods SET goods_number=goods_number-#{goods_number} WHERE id=#{id}")
     int reduceGoodsStock(@Param("goods_number") int number, @Param("id") Long goodsId);

 /**
  * 增加商品库存
  * @param number 减少数量
  * @param goodsId 商品id
  * @return 影响行数
  */
     @Update("UPDATE goods SET goods_number=goods_number+#{goods_number} WHERE id=#{id}")
     int restoreGoodsStock(@Param("goods_number") int number, @Param("id") Long goodsId);

 /**
  * 编辑商品库存
  * @param stock 库存
  * @param goodsId 商品id
  * @return 影响行数
  */
     @Update("UPDATE goods SET goods_number=#{goods_number} WHERE id=#{id}")
     int editGoodsStock(@Param("goods_number") int stock, @Param("id") Long goodsId);
}
